home *** CD-ROM | disk | FTP | other *** search
/ Speccy ClassiX 1998 / Speccy ClassiX 98.iso / amiga_system / the_aminet / dev / gcc / ixemulsrc.lha / ixemul-41.4 / library / ixconfig.c < prev    next >
C/C++ Source or Header  |  1995-09-27  |  7KB  |  217 lines

  1. /*
  2.  *  This file is part of ixemul.library for the Amiga.
  3.  *  Copyright (C) 1991, 1992  Markus M. Wild
  4.  *
  5.  *  This library is free software; you can redistribute it and/or
  6.  *  modify it under the terms of the GNU Library General Public
  7.  *  License as published by the Free Software Foundation; either
  8.  *  version 2 of the License, or (at your option) any later version.
  9.  *
  10.  *  This library is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  *  Library General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU Library General Public
  16.  *  License along with this library; if not, write to the Free
  17.  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  */
  19.  
  20. /* NOT (!) to be used by custom applications, this is a very special case !! */
  21.  
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <string.h>
  25. #include <dos/datetime.h>
  26. #include <proto/dos.h>
  27. /* <unistd.h> must come after <proto/dos.h> because <devices/timer.h>
  28.    pulled in by <proto/dos.h> defines struct timeval as does <sys/time.h>
  29.    pulled in by <unistd.h>.  However <unistd.h> has an ifdef to avoid
  30.    the collision, which <devices/timer.h> does not. */
  31. #include <unistd.h>
  32. #include <time.h>
  33.  
  34. #include "ixemul.h"
  35.  
  36. extern struct ixemul_base *ixemulbase;
  37.  
  38. int
  39. main (int argc, char *argv[])
  40. {
  41.   int c;
  42.   int do_dots = ixemulbase->ix_translate_dots;
  43.   int do_slash = ixemulbase->ix_translate_slash;
  44.   int mem_buf = ixemulbase->ix_membuf_limit;
  45.   int do_force = ixemulbase->ix_force_translation;
  46.   int do_links = ixemulbase->ix_translate_symlinks;
  47.   int do_sleep = 0;
  48.   int red_zone_size = ixemulbase->ix_red_zone_size;
  49.   int do_watch = ixemulbase->ix_watch_stack;
  50.   int fs_buf_factor = ixemulbase->ix_fs_buf_factor;
  51.   int ignore_global_env = ixemulbase->ix_ignore_global_env;
  52.   int unix_pattern_matching_case_sensitive = ixemulbase->ix_unix_pattern_matching_case_sensitive;
  53.   int no_insert_disk_requester = ixemulbase->ix_no_insert_disk_requester;
  54.   int allow_amiga_wildcard = ixemulbase->ix_allow_amiga_wildcard;
  55.   int no_flushing = ixemulbase->ix_do_not_flush_library;
  56.  
  57.   while ((c = getopt (argc, argv, "./?ab:defhilm:pPr:sSuvwx")) != EOF)
  58.     switch (c)
  59.       {
  60.       case 'd':      
  61.         mem_buf = 0;
  62.         /* fall into */
  63.  
  64.       case 'a':
  65.         do_dots =
  66.           do_slash = 
  67.             do_force = 
  68.           do_links = 0;
  69.         break;
  70.  
  71.       case 'b':
  72.         fs_buf_factor = atoi (optarg);
  73.         if (! fs_buf_factor)
  74.           fs_buf_factor = 64;
  75.         break;
  76.  
  77.       case 'v':
  78.         no_insert_disk_requester = 1;
  79.         break;
  80.       
  81.       case 'p':
  82.         unix_pattern_matching_case_sensitive = 0;
  83.         break;
  84.       
  85.       case 'P':
  86.         unix_pattern_matching_case_sensitive = 1;
  87.         break;
  88.       
  89.       case '.':
  90.           do_dots = 1;
  91.           break;
  92.           
  93.       case '/':
  94.         do_slash = 1;
  95.         break;
  96.         
  97.       case 'f':
  98.         do_force = 1;
  99.         break;
  100.  
  101.       case 'i':
  102.         ignore_global_env = 1;
  103.         break;
  104.  
  105.       case 'e':
  106.         ignore_global_env = 0;
  107.         break;
  108.  
  109.       case 'l':
  110.     do_links = 1;
  111.     break;
  112.  
  113.       case 'm':
  114.         mem_buf = atoi (optarg);
  115.     break;
  116.  
  117.       case 'r':
  118.     red_zone_size = atoi (optarg);
  119.     break;
  120.  
  121.       case 'S':
  122.       case 's':
  123.         do_sleep = c;
  124.         break;
  125.  
  126.       case 'u':
  127.         allow_amiga_wildcard = 0;
  128.         break;
  129.  
  130.       case 'w':
  131.     do_watch = 1;
  132.     break;
  133.  
  134.       case 'x':
  135.           do_watch = 0;
  136.           break;
  137.  
  138.       default:
  139.     fprintf (stderr, "%s [-d|-a|-p|-P|-b N|-f|-i|-e|-.|-/|-l|-m N|-r N|-s|-S|-u|-w|-x]\n", argv[0]);
  140.     fprintf (stderr, "  -d   reset values to defaults\n"
  141.              "  -a   full AmigaDOS mode, no ./ translations\n"
  142.              "  -p   use case-insensitive filename pattern-matching\n"
  143.              "  -P   use case-sensitive filename pattern-matching\n"
  144.              "  -b N N physical block map into 1 logical (stdio) block\n"
  145.              "  -f   don't accept AmigaDOS notation\n"
  146.              "  -i   ignore global environment (ENV:)\n"
  147.              "  -e   don't ignore global environment (ENV:)\n"
  148.              "  -.   translate . and ..\n"
  149.              "  -/   translate /foo -> foo: and a//b -> a/b\n"
  150.              "  -l   translate contents of symbolic links\n"
  151.              "  -m N files upto N bytes are cached in memory\n"
  152.              "  -r N set red zone size to N bytes. 0 disables.\n"
  153.              "  -s   prevent flushing of the library.\n"
  154.              "  -S   allow flushing of the library.\n"
  155.              "  -v   suppress the \"Insert volume in drive\" requester\n"
  156.              "  -u   do not accept #? wildcards\n"
  157.              "  -w   enable stack watcher\n"
  158.              "  -x   disable stack watcher\n");
  159.     exit (1);
  160.       }
  161.  
  162.   ixemulbase->ix_translate_dots = do_dots;
  163.   ixemulbase->ix_translate_slash = do_slash;
  164.   ixemulbase->ix_translate_symlinks = do_links;
  165.   ixemulbase->ix_force_translation = do_force;
  166.   ixemulbase->ix_membuf_limit = mem_buf;
  167.   ixemulbase->ix_red_zone_size = red_zone_size;
  168.   ixemulbase->ix_watch_stack = do_watch;
  169.   ixemulbase->ix_fs_buf_factor = fs_buf_factor;
  170.   ixemulbase->ix_ignore_global_env = ignore_global_env;
  171.   ixemulbase->ix_unix_pattern_matching_case_sensitive = unix_pattern_matching_case_sensitive;
  172.   ixemulbase->ix_no_insert_disk_requester = no_insert_disk_requester;
  173.   ixemulbase->ix_allow_amiga_wildcard = allow_amiga_wildcard;
  174.   
  175.   printf ("%sranslate . and .., %stranslate /, %stranslate symlinks,\n"
  176.       "%sallow AmigaDOS notation, membuf size = %d,\n"
  177.       "red zone size = %d, stack watcher is %s %s,\n"
  178.       "%d physical blocks build%s one logical block (for stdio),\n"
  179.       "%signore global environment (ENV:),\n"
  180.       "use case-%ssensitive pattern-matching,\n"
  181.       "%ssuppress the \"Insert volume in drive\" requester,\n"
  182.           "%saccept #? as wildcard.\n",
  183.           do_dots ? "T" : "Don't t",
  184.           do_slash ? "" : "don't ",
  185.           do_links ? "" : "don't ",
  186.           do_force ? "don't " : "",
  187.           mem_buf,
  188.       red_zone_size,
  189.       do_watch ? "enabled" : "disabled",
  190.       red_zone_size ? (do_watch ? "(and active)" : "(and not active)")
  191.             : (do_watch ? "(but not active)" : "(and not active)"),
  192.       fs_buf_factor, fs_buf_factor == 1 ? "s" : "",
  193.       ignore_global_env ? "" : "don't ",
  194.       unix_pattern_matching_case_sensitive ? "" : "in",
  195.       no_insert_disk_requester ? "" : "do not ",
  196.           allow_amiga_wildcard ? "" : "do not ");
  197.  
  198.   /* if -s is specified, the program keeps the library open until it is 
  199.      interrupted. That way, the library can't be flushed, so the preferences
  200.      are not reset */
  201.   if (do_sleep)
  202.   {
  203.     if (do_sleep == 's' && !no_flushing)
  204.     {
  205.       ixemulbase->ix_do_not_flush_library = 1;
  206.       ixemulbase->ix_lib.lib_OpenCnt++;
  207.     }
  208.     if (do_sleep == 'S' && no_flushing)
  209.     {
  210.       ixemulbase->ix_do_not_flush_library = 0;
  211.       ixemulbase->ix_lib.lib_OpenCnt--;
  212.     }
  213.   }
  214.  
  215.   return 0;
  216. }
  217.